package com.cskaoyan.javase.oop1._7bigexercise._2callbyvalue;

/**
 * @description: 值传递
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 练习：
 * 定义一个学生类，该类具有一个int属性age
 *  -在测试类中写一个方法，交换两个Student对象的age属性
 *  -请问能够交换成功吗？原因是什么？
 *  能够交换成功,Java是值传递的,方法可以改变对象的状态,可以改变对象中成员变量的取值
 *
 *  -在测试类中写一个方法，交换两个Student对象的引用（地址）
 *  -请问能够交换成功吗？原因是什么？'
 *  不能交换成功的,因为值传递是不能更改局部变量的实参的
 *
 */
public class Demo {
    public static void main(String[] args) {

        //Java是值传递的,方法可以改变对象的状态,可以改变对象中成员变量的取值
        Student s1 = new Student(18);
        Student s2 = new Student(81);
        System.out.println(s1);
        System.out.println(s2);
        /*swapStuAge(s1, s2);
        System.out.println(s1.age);
        System.out.println(s2.age);*/

        swapStuReference(s1, s2);
        System.out.println(s1);
        System.out.println(s2);
    }

    public static void swapStuAge(Student stu1, Student stu2) {
        int temp;
        temp = stu1.age;
        stu1.age = stu2.age;
        stu2.age = temp;
    }

    public static void swapStuReference(Student stu1, Student stu2) {
        Student temp;
        temp = stu1;
        stu1 = stu2;
        stu2 = temp;
        System.out.println(stu1);
        System.out.println(stu2);
    }
}

class Student {
    int age;

    public Student() {
    }

    public Student(int age) {
        this.age = age;
    }
}
